package com.lyl.redis.modules.controller;

import cn.hutool.core.collection.ListUtil;
import com.lyl.redis.modules.dto.ManagementAccountDTO;
import com.lyl.redis.modules.validation.group.Update;
import com.lyl.redis.modules.vo.ManagementAccountVO;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import java.util.List;

@Validated
@RestController
@RequiredArgsConstructor
@RequestMapping("/managementOper")
public class ManagementOperController {

    /**
     * 保存资方人员账号
     *
     * @param dto 请求参数
     * @return true/false
     */
    @PostMapping("/saveAccount")
    public boolean saveAccount(@RequestBody @Validated(Integer.class) ManagementAccountDTO dto) {
        return true;
    }

    /**
     * 修改资方人员账号
     *
     * @param dto 请求参数
     * @return true/false
     */
    @PutMapping("/updateAccount")
    public boolean updateAccount(@RequestBody @Validated(Update.class) ManagementAccountDTO dto) {
        return true;
    }

    /**
     * 资方人员账号列表接口（模糊查询）
     *
     * @param keyword 搜索关键字（用户名或者手机号）
     * @return list
     */
    @GetMapping("/accountList")
    public List<ManagementAccountVO> accountList(String keyword) {
        return ListUtil.empty();
    }

    /**
     * 订单分发
     *
     * @param orderNo             订单单号
     * @param managementAccountId 资方人员账号id
     * @return true/false
     */
    @PostMapping("/orderDistribute")
    public boolean orderDistribute(@NotBlank(message = "订单单号不能为空") String orderNo,
                                   @NotNull(message = "资方账号id不能为空") Long managementAccountId) {
        return true;
    }

    //************************** 小程序接口开始 **************************

    /**
     * 小程序登录
     *
     * @param phone            手机号
     * @param verificationCode 验证码
     * @return //todo 返回值需要定义
     */
    @PostMapping("/login")
    public void login(@NotBlank(message = "手机号码不能为空")
                      @Pattern(regexp = "^((110)|(13[0-9])|(14[5,6,7,9])|(15[^4])|(16[0-9])|(18[0-9])|(17[0-8])|(19[0|1|2|3|5|6|7|8|9]))\\d{8}$",
                              message = "手机号格式不正确") String phone,
                      @NotBlank(message = "验证码不能为空")
                              String verificationCode) {

    }

    /**
     * 根据订单审批状态获取订单列表
     *
     * @param status 审批状态（0：全部订单，1：待审批，2：已确认，3已驳回）
     * @return //todo 返回值需要定义
     */
    @GetMapping("/orderList/{status}")
    public void orderList(@PathVariable Integer status) {

    }

    /**
     * 确认订单完成
     *
     * @param orderNos 订单单号
     * @return true/false
     */
    @PostMapping("/confirmOrderCompletion")
    public boolean confirmOrderCompletion(@NotEmpty(message = "orderNos不能为空") List<Long> orderNos) {
        return true;
    }

    /**
     * 驳回订单
     *
     * @param orderNos 订单单号
     * @return true/false
     */
    @PostMapping("/rejectOrder")
    public boolean rejectOrder(@NotEmpty(message = "orderNos不能为空") List<Long> orderNos) {
        return true;
    }

    /**
     * 按月统计订单
     *
     * @return 统计结果 //todo 返回值需要定义
     */
    @GetMapping("/statisticsOrderByMonth")
    public List<?> statisticsByMonth() {
        return ListUtil.empty();
    }

    //************************** 小程序接口结束 **************************

}

